package com.unlp.javaclickers.docente.vistas;

import javax.swing.JFrame;
import javax.swing.BoxLayout;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;

import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.Frame;

import javax.swing.JLabel;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.table.DefaultTableColumnModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import com.google.common.collect.Lists;
import com.unlp.javaclickers.modelo.Clase;
import com.unlp.javaclickers.modelo.Problema;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.List;
import java.util.Map;
import java.util.Vector;

public class ResumenDeClase {

	private JFrame frame;
	private JFrame Main;
	private List<Problema> problemas;
	private Clase clase;
	List<Map<String, Integer>> resultados = Lists.newArrayList();
	public Font fuente = new Font("Teen", Font.BOLD, 16);

	public ResumenDeClase() {
		initialize();
	}

	public ResumenDeClase(JFrame main, List<Map<String, Integer>> resultados,
			List<Problema> problemas, Clase clase) {
		this.Main = main;
		this.problemas = problemas;
		this.resultados = resultados;
		this.clase = clase;
		initialize();
	}

	/**
	 * Initialize the contents of the frame.
	 */
	private void initialize() {
		frame = new JFrame();
		frame.getContentPane().setBackground(Color.WHITE);
		frame.setExtendedState(Frame.MAXIMIZED_BOTH);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.getContentPane().setLayout(
				new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS));
		frame.setFont(fuente);

		JPanel panel = new JPanel();
		panel.setBackground(Color.WHITE);
		frame.getContentPane().add(panel);
		panel.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));

		JLabel lblicon = new JLabel("");
		lblicon.setIcon(new ImageIcon(getClass().getResource("logo.PNG")));
		panel.add(lblicon);

		JPanel panel_problema = new JPanel();
		panel_problema.setBackground(Color.WHITE);
		frame.getContentPane().add(panel_problema);

		String titulo = "Resultados de la clase: " + clase.getNombre();
		JLabel lblproblema = new JLabel(titulo);
		lblproblema.setFont(new Font("Teen", Font.BOLD, 22));
		panel_problema.add(lblproblema);

		JPanel panel_tablas = new JPanel();
		panel_tablas.setLayout(new BoxLayout(panel_tablas, BoxLayout.Y_AXIS));
		panel_tablas.setBackground(Color.WHITE);
		JPanel panel_tabla;
		Vector<String> columnNames;
		Vector<String> valores;
		JTable tabla;
		int i = 0;
		JLabel tituloTabla;
		for (Map<String, Integer> resultadosProblema : resultados) {
			tituloTabla = new JLabel("Problema: "
					+ problemas.get(i).getNombre());
			tituloTabla.setFont(new Font("Teen", Font.BOLD, 18));
			i++;
			panel_tablas.add(tituloTabla);
			panel_tabla = new JPanel();
			panel_tabla.setBackground(Color.WHITE);
			columnNames = new Vector<String>();
			valores = new Vector<String>();
			columnNames.addElement("Respuestas:");
			valores.addElement("Cantidad:");
			for (String respuesta : resultadosProblema.keySet()) {
				columnNames.addElement(respuesta);
				valores.addElement(resultadosProblema.get(respuesta).toString());
			}
			Vector<Vector<String>> rowData = new Vector<Vector<String>>();
			rowData.addElement(columnNames);
			rowData.addElement(valores);
			tabla = new JTable(rowData, columnNames);
			tabla.setBackground(Color.WHITE);
			tabla.setEnabled(false);
			tabla.setFont(new Font("Teen", Font.BOLD, 15));

			tabla.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 
			for (int c = 0; c < tabla.getColumnCount(); c++) {
				packColumn(tabla, c, 2);
			}

			panel_tabla.add(tabla);
			panel_tablas.add(panel_tabla);

		}

		JScrollPane panelScroll = new JScrollPane(panel_tablas);
		frame.getContentPane().add(panelScroll);

		JPanel panelBotonTerminar = new JPanel();
		panelBotonTerminar.setBackground(Color.WHITE);
		frame.getContentPane().add(panelBotonTerminar);

		JButton btnTerminar = new JButton("Terminar");
		btnTerminar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Main.setVisible(true);
				frame.setVisible(false);
			}
		});
		btnTerminar.setFont(fuente);
		panelBotonTerminar.add(btnTerminar);
	}

	public void packColumn(JTable table, int vColIndex, int margin) {
		DefaultTableColumnModel colModel = (DefaultTableColumnModel) table
				.getColumnModel();
		TableColumn col = colModel.getColumn(vColIndex);
		int width = 0; 
		TableCellRenderer renderer = col.getHeaderRenderer();
		if (renderer == null) {
			renderer = table.getTableHeader().getDefaultRenderer();
		}
		Component comp = renderer.getTableCellRendererComponent(table,
				col.getHeaderValue(), false, false, 0, 0);
		width = comp.getPreferredSize().width;
		for (int r = 0; r < table.getRowCount(); r++) {
			renderer = table.getCellRenderer(r, vColIndex);
			comp = renderer.getTableCellRendererComponent(table,
					table.getValueAt(r, vColIndex), false, false, r, vColIndex);
			width = Math.max(width, comp.getPreferredSize().width);
		}
		width += 2 * margin; 
		col.setPreferredWidth(width);
	}

	public JFrame getFrame() {
		return frame;
	}

	public void setFrame(JFrame frame) {
		this.frame = frame;
	}

	public JFrame getMain() {
		return Main;
	}

	public void setMain(JFrame main) {
		Main = main;
	}

}
